# encoding: UTF-8

'''
本文件中包含了CTA模块中用到的一些基础设置、类和常量等。
'''

from __future__ import division


# 把vn.trader根目录添加到python环境变量中
import sys
sys.path.append('..')


# 常量定义
# CTA引擎中涉及到的交易方向类型
CTAORDER_BUY = u'买开'
CTAORDER_SELL = u'卖平'
CTAORDER_SHORT = u'卖开'
CTAORDER_COVER = u'买平'

# 本地停止单状态
STOPORDER_WAITING = u'等待中'
STOPORDER_CANCELLED = u'已撤销'
STOPORDER_TRIGGERED = u'已触发'

# 本地停止单前缀
STOPORDERPREFIX = 'CtaStopOrder.'

# 数据库名称
TICK_DB_NAME = 'Trader_Tick_Db'
DAILY_DB_NAME = 'Trader_Daily_Db'
MINUTE_DB_NAME = 'Trader_1Min_Db'
TEST_DB_NAME = 'test'



# CTA引擎中涉及的数据类定义
from base.baseConstant import EMPTY_UNICODE, EMPTY_STRING, EMPTY_FLOAT, EMPTY_INT

########################################################################
class StopOrder(object):
    """本地停止单"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        self.vtSymbol = EMPTY_STRING
        self.direction = EMPTY_UNICODE
        self.offset = EMPTY_UNICODE
        self.price = EMPTY_FLOAT
        self.volume = EMPTY_INT
        
        self.strategy = None             # 下停止单的策略对象
        self.stopOrderID = EMPTY_STRING  # 停止单的本地编号 
        self.status = EMPTY_STRING       # 停止单状态


########################################################################
class CtaBarData(object):
    """K线数据"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        self.vtSymbol = EMPTY_STRING        # vt系统代码
        self.symbol = EMPTY_STRING          # 代码
        self.exchange = EMPTY_STRING        # 交易所
    
        self.open = EMPTY_FLOAT             # OHLC
        self.high = EMPTY_FLOAT
        self.low = EMPTY_FLOAT
        self.close = EMPTY_FLOAT
        
        self.date = EMPTY_STRING            # bar开始的时间，日期
        self.time = EMPTY_STRING            # 时间
        self.datetime = None                # python的datetime时间对象
        
        self.volume = EMPTY_INT             # 成交量
        self.openInterest = EMPTY_INT       # 持仓量

    def __repr__(self):
        return "Bar Data : vtSymbol=%s, datetime=%s, open=%f, high=%f, low=%f, close=%f"\
               % (self.vtSymbol, self.datetime, self.open, self.high, self.low, self.close)

########################################################################
class CtaTickData(object):
    """Tick数据"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""       
        self.vtSymbol = EMPTY_STRING            # vt系统代码
        self.symbol = EMPTY_STRING              # 合约代码
        self.exchange = EMPTY_STRING            # 交易所代码

        # 成交数据
        self.lastPrice = EMPTY_FLOAT            # 最新成交价
        self.volume = EMPTY_INT                 # 最新成交量
        self.openInterest = EMPTY_INT           # 持仓量
        
        self.upperLimit = EMPTY_FLOAT           # 涨停价
        self.lowerLimit = EMPTY_FLOAT           # 跌停价
        
        # tick的时间
        self.date = EMPTY_STRING            # 日期
        self.time = EMPTY_STRING            # 时间
        self.datetime = None                # python的datetime时间对象
        
        # 五档行情
        self.bidPrice1 = EMPTY_FLOAT
        self.bidPrice2 = EMPTY_FLOAT
        self.bidPrice3 = EMPTY_FLOAT
        self.bidPrice4 = EMPTY_FLOAT
        self.bidPrice5 = EMPTY_FLOAT
        
        self.askPrice1 = EMPTY_FLOAT
        self.askPrice2 = EMPTY_FLOAT
        self.askPrice3 = EMPTY_FLOAT
        self.askPrice4 = EMPTY_FLOAT
        self.askPrice5 = EMPTY_FLOAT        
        
        self.bidVolume1 = EMPTY_INT
        self.bidVolume2 = EMPTY_INT
        self.bidVolume3 = EMPTY_INT
        self.bidVolume4 = EMPTY_INT
        self.bidVolume5 = EMPTY_INT
        
        self.askVolume1 = EMPTY_INT
        self.askVolume2 = EMPTY_INT
        self.askVolume3 = EMPTY_INT
        self.askVolume4 = EMPTY_INT
        self.askVolume5 = EMPTY_INT    

########################################################################
class TickData(object):
    """Tick数据"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        self.exchange = EMPTY_STRING            # 交易所代码
        self.symbol = EMPTY_STRING              # 合约代码

        # tick的时间
        self.date = EMPTY_STRING            # 日期
        self.time = EMPTY_STRING            # 时间
        self.datetime = EMPTY_STRING                # python的datetime时间对象的str格式
        # self.datetime = None                # python的datetime时间对象

        # 成交数据
        self.lastPrice = EMPTY_FLOAT            # 最新成交价
        self.holdInterest = EMPTY_INT           # 持仓量
        self.volume = EMPTY_INT                 # 净增仓
        self.businessBalance = EMPTY_FLOAT      # 成交额
        self.businessAmount = EMPTY_INT         # 成交量
        self.openAmount = EMPTY_INT             # 开仓成交量
        self.closeAmount = EMPTY_INT            # 平仓成交量
        self.businessType = EMPTY_STRING        # 成交类型
        self.Direction = EMPTY_STRING           # 方向

        # 五档行情
        self.bidPrice1 = EMPTY_FLOAT
        # self.bidPrice2 = EMPTY_FLOAT
        # self.bidPrice3 = EMPTY_FLOAT
        # self.bidPrice4 = EMPTY_FLOAT
        # self.bidPrice5 = EMPTY_FLOAT

        self.askPrice1 = EMPTY_FLOAT
        # self.askPrice2 = EMPTY_FLOAT
        # self.askPrice3 = EMPTY_FLOAT
        # self.askPrice4 = EMPTY_FLOAT
        # self.askPrice5 = EMPTY_FLOAT

        self.bidVolume1 = EMPTY_INT
        # self.bidVolume2 = EMPTY_INT
        # self.bidVolume3 = EMPTY_INT
        # self.bidVolume4 = EMPTY_INT
        # self.bidVolume5 = EMPTY_INT

        self.askVolume1 = EMPTY_INT
        # self.askVolume2 = EMPTY_INT
        # self.askVolume3 = EMPTY_INT
        # self.askVolume4 = EMPTY_INT
        # self.askVolume5 = EMPTY_INT
